记录一次系统迁移

原因

线上应用服务器为阿里云服务器,被攻击,注入了挖矿程序,cpu占用率百分百;

迁移步骤

本次迁移仅记录重要步骤,涉及公司的内部数据库名,服务名称,都使用不敏感字等代替

1.准备

1.提前通知运维人员,发布停机维护公告,时间为第二天凌晨0点到6点

2.将新服务器提前装好,mysql,redis,jdk,等环境

3.提前打包好应用程序, 将数据库链接,redis链接,以及相关推送服务端口修改为新服务器地址

2.停机

1.在凌晨0点之后,依次将所有的的应用服务停机
使用脚本stop.sh 停止相关服务

1
sh stopSystem.sh

stopSystem.sh 脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
echo "关闭test1进程"

pid=`ps -ef | grep test1|grep -v grep| awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
fi


echo "关闭test2进程"

pid=`ps -ef | grep test2|grep -v grep| awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
fi

```

#### 3.mysql数据库迁移

1.将 mysql 数据库备份,使用mysql自带的mysqldump命令,命令如下

mysqldump -uroot -proot databasetest > databasetest.sql

1
2
3
2.将备份的databasetest数据库还原到新的数据库
```
mysql -uroot -proot databasetest < databasetest.sql

mysql 数据迁移出现问题
1.警告,这是在mysql5.6 之后处于安全考虑,在命令行界面上使用密码可以是不安全的

1
2
mysqldump -uroot -proot databasetest > databasetest.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

解决办法利用mysql_config_editor 设置加密模式,虽然仍然有警告但是备份成功

1
2
3
4
root@40fd165a4bc5:/# mysql_config_editor set --login-path=local --host=localhost --user=root --password
Enter password:
root@40fd165a4bc5:/# mysqldump -uroot -proot databasetest > databasetest.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

2.还原没有数据库

1
2
3
root@da02d2ffff9b:/var/log/mysql# mysql -uroot -proot databasetest < databasetest.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1049 (42000): Unknown database 'databasetest'

解决办法.在新的mysql中提前建databasetest数据库,建好库之后在进行导入

4.应用系统迁移

1.应用系统,已经打包好,使用脚本启动即可
startSystem.sh
脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

echo "切换到test1地址"
cd /home/application/test1-prod

source /etc/profile

echo "启动test1"
nohup java -jar test1.jar --spring.profiles.active=prod > nohup.out &

echo "test1启动完成"


echo "切换到test2地址"
cd /home/application/test2-prod

source /etc/profile

echo "启动test2"
nohup java -jar test2.jar --spring.profiles.active=prod > nohup.out &

echo "test2启动完成"

应用系统 迁移出现问题
1.端口被占用
解决办法.经查找,是8081健康检测端口被占用,咨询运维组,可更换端口18081使用

5. nginx转发配置

由于原先域名都是指向被挖矿的服务器,因此需要在被挖矿的服务器上安装nginx 将请求转发到新服务器
一些核心的配置如下,

1
2
3
4
5
6
7
8
   upstream appapi {
#server 10.10.10.112:82 max_fails=0;
server 10.10.10.113:82 max_fails=0;
}
location /admin {
#proxy_pass http://10.10.10.112:81/admin;
proxy_pass http://10.10.10.113:81/admin;
}

6.迁移完成,验证服务

1.依次验证相关服务

验证服务出现问题
1.发现xxl-job 调用中心,注册不上应用服务器节点
解决办法:开放新的应用服务器上的xxl-job占用的端口,重启应用系统,将xxl-job注册节点修改为自动,等待两分钟,注册成功,定时任务执行成功

7. 后续重装原被挖矿的服务器

1.系统在新服务器稳定运行一天之后,将原先被挖矿的服务器重装,将相应的数据,应用服务等迁移回被重装的的服务器中

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

继开 wechat
欢迎加我的微信,共同交流技术